User interfaces provide a connection between a software program and a human user, enabling the user to operate the software, receive results of the operation, or both. A command line shell (CS) is a traditional operating system (OS) interface for commanding an OS with text-based keyboard entered commands within a ‘command prompt’. A user using a CS can run programs, launch batch commands or shell procedures, and perform system administration, for example. Output is also text-based and usually terse.
Today, most operating systems provide a graphical user interface (GUI) for commanding applications. Applications may use the supplied GUI and add elements for operating the application. GUIs often employ one or more appropriate visual metaphors for objects and are considered to be more user-friendly. Each of the text-based and graphics-based interfaces has its own advantages and disadvantages. For example, a CS is a powerful interface having the advantage that virtually any software tool can be written to work in the CS environment. Further, CS is an interface allowing an advanced user to perform complex commands quickly and efficiently. On the other hand, a CS is not a user friendly environment because it is not an intuitive environment and therefore requires the user to work in a non-visual world where knowledge of commands and their exact syntax is required in order to operate it effectively.
A GUI, which is currently the most popular type of interface, provides a more intuitive environment where each command or tool can be visually represented such as by an icon, menu or form. Because GUIs display information visually, they are able to provide information in such a way that concepts that apply to the physical world are reused in the computer environment. Real-world paradigms like putting things in places visually support commands and translate to commands into drag and drop operations. This visual support makes the GUI much more intuitive than a CS for typical users and thus makes it a more user friendly environment.
Although there are many GUI frameworks that allow tools to reuse common user interface components, there is no single generic graphical tool that can be used for the same variety of tool domains such as in the CS environment. While there may be GUIs that perform the same things that a command line tool performs, the GUIs reside in different products that are typically incompatible with each other.
Due to these two types of user interfaces, users utilize one or the other depending on the task. For example, a software developer might work in a command shell to run compile commands, whereas he/she would likely work with a GUI to debug a program. With modern integrated development environments (IDEs), the goal is to integrate all the tools that a developer needs to work with into a single GUI so that the developer does not need to work in different environments for different tasks. For example, rather than using one GUI to edit a file and another to debug the same file, both tools can exist in one application.
Acknowledging that the flexibility of the command shell is a necessary part of many development processes, many IDEs attempt to integrate the command shell. The usual way that command shells are integrated into IDEs is very limited. This approach has been to introduce a GUI view that allows a user to input text-based commands to standard input to the shell and see standard output and error from the shell in text form. In most cases, a text view that looks very much like a shell console is used as a display. The end result amounts to having a shell console inside a GUI rather than having it in a separate window. As a result, there is very little integration between the shell view and the rest of the GUI. Graphical views provide object visualization, actions to work against those objects, as well as drag and drop support within and across views, while the shell view does not.
A solution to some or all of these shortcomings is therefore desired.